tg-me.com/cppproglib/5770
Last Update:
🧱 Для чего нужны плоские контейнеры и как их использовать
💡 В C++23 появились долгожданные «плоские» контейнеры: flat_set
, flat_map
, flat_multiset
и flat_multimap
— адаптеры, которые используют обычные векторы вместо деревьев.
❗️ Ключевые особенности:
• поиск O(log N) как в обычном set, но быстрее на практике
• итерация в разы быстрее классических контейнеров
• потребление памяти меньше на сотни процентов
• вставка и удаление катастрофически медленные O(N)
Основная идея — хранить данные в отсортированном векторе и использовать бинарный поиск. std::flat_map
даже хранит ключи и значения в отдельных контейнерах для лучшей производительности.
Идеально подходят для сценариев «заполнил один раз — читаю много раз». Особенно эффективны при работе с миллионами элементов и компактными ключами.
⚠️ Не используйте их, если планируете частые вставки и удаления — в таких случаях классические std::set/map
или unordered-контейнеры
будут эффективнее.
Библиотека C/C++ разработчика